package function接口;

import java.util.function.Function;

/**
 * @author : ZhuQi
 * @version : 时间:2022/9/5 22:46 版本:
 * @description : Function 函数接口
 */
public class FunctionDemo {

    public static void main(String[] args) {
        // 输出: 100
        convert("100", Integer::parseInt);

        // 输出: 666
        convert(100, i -> String.valueOf(i + 566));

        // 输出: 666
        convert("100", Integer::parseInt, i -> String.valueOf(i + 566));
    }

    /**
     * 定义一个方法，把一个字符串转换成int类型，在控制台输出
     */
    public static void convert(String s, Function<String, Integer> fun) {
        // 1,R apply(T t) 	将此函数应用于给定的参数
        // Integer i = fun.apply(s);
        int i = fun.apply(s);
        System.out.println(i);
    }


    /**
     * 定义一个方法，把一个int类型的数据加上一个整数之后，转换为字符串在控制台输出
     */
    public static void convert(int i, Function<Integer, String> fun) {
        String s = fun.apply(i);
        System.out.println(s);
    }


    /**
     * 定义一个方法，把一个字符串转换成int类型，把int类型的数据加上一个整数之后，转换为字符串在控制台输出
     */
    public static void convert(String s, Function<String, Integer> fun1, Function<Integer, String> fun2) {
        // Integer i = fun.apply(s);
        // String ss = fun.apply(i);

        // 2,default <V> Function andThen(Function after) 	返回一个组合函数,首先将该函数应用于输入,然后将after函数应用于结果
        // 源码：return (T t) -> after.apply(apply(t));相当于上两步
        String ss = fun1.andThen(fun2).apply(s);

        System.out.println(ss);
    }
}
